namespace mplat {

    export interface IShareInfo {
        /** 分享的标题 */
        title?: string;
        /** 图片地址 */
        imageUrl?: string;
        /** 审核通过的图片 ID */
        imageUrlId?: string;
    }

    export interface IShareInitData {
        shareList: IShareInfo[];
        defaultShareIdx?: number;
        minTime?: number;
        minCount?: number;
        shareDefData?: any;
        shareFailTips?: IShowModalInfo[];
        shareDefSuccess?: () => void;
        shareDefFail?: () => void;
        shareDefComplete?: () => void;
    }

    export interface INavigateParam {
        /** 要打开的小程序 appId */
        appId: string;
        /** 打开的页面路径，如果为空则打开首页
         * 小游戏的 wx.onShow 回调函数、wx.getLaunchOptionsSync 中可以获取到 query 数据。
         * 对于小游戏，可以只传入 query 部分，来实现传参效果，如：传入 "?foo=bar"。
         */
        path?: string
        page?: string;
        /** 跳转的是小游戏，可以在 wx.onShow、wx.getLaunchOptionsSync 中可以获取到这份数据数据 */
        extraData?: object
        /** 默认为release */
        envVersion?: string
        /** 接口调用成功的回调函数 */
        success?: Function
        /** 接口调用失败的回调函数 */
        fail?: Function
        /** 接口调用结束的回调函数（调用成功、失败都会执行） */
        complete?: Function
    }

    export interface IOpenAbility {

        /** 跳转到其他的小游戏 */
        navigateToMiniProgram(param: INavigateParam);

        /** （全局的）初始化分享失败跳出的提示框设置 */
        setShareFailTips(tips: IShowModalInfo[]);
        /** （全局的）初始化分享需要的数据，title，imageUrl之类; 
         * defaultShareIdx=-1为右上角分享随机取
         * minTime为最少在几秒之后算成功，minCount为最少几次之后算成功
         */
        setShareInfo(shareList: IShareInfo[], defaultShareIdx?: number, minTime?: number, minCount?: number);
        /** （全局的）初始化默认的发送的query数据 */
        setShareDefaultData(data: any);
        /** 全局通用的默认分享完成 */
        setShareDefaultComplete(success?: () => void, fail?: () => void, complete?: () => void)

        /** 初始化右上角的···的分享功能 */
        showShareMenu(withShareTicket?: boolean);

        /** 主动分享 */
        shareAppMessage(param?: IShareInfo, data?: any, success?: () => void, fail?: () => void);

        /** 是否添加过桌面图标，ov有的特性 */
        hasShortcutInstalled(success?: (res) => void, fail?: (err) => void, complete?: () => void);
        /** 添加桌面图标，ov的特性 */
        installShortcut(message?: string, success?: () => void, fail?: (err) => void, complete?: () => void);
        /** 添加桌面图标，vivo的特性 */
        isStartupByShortcut(success?: (res) => void, fail?: () => void);
    }

    export class OpenAbility implements IOpenAbility {

        navigateToMiniProgram(param: INavigateParam) {

        }

        setShareFailTips(tips: IShowModalInfo[]) {
        }
        setShareInfo(shareList: IShareInfo[], defaultShareIdx?: number, minTime?: number, minCount?: number) {
        }
        setShareDefaultData(data: any) {
        }
        setShareDefaultComplete(success?: () => void, fail?: () => void, complete?: () => void) { }
        showShareMenu(withShareTicket?: boolean) {
        }
        shareAppMessage(param?: IShareInfo, data?: any, success?: () => void, fail?: () => void) {
            if (!!success) success()
        }

        hasShortcutInstalled(success?: (res: any) => void, fail?: (err: any) => void, complete?: () => void) {
            if (!!success) success(true);
            if (!!complete) complete();
        }
        installShortcut(message?: string, success?: () => void, fail?: (err: any) => void, complete?: () => void) {
            if (!!success) success();
            if (!!complete) complete();
        }
        isStartupByShortcut(success?: (res: any) => void, fail?: () => void) {
            if (!!success) success(false);
        }

    }
}